package com.hxkj.service;

import com.github.pagehelper.PageInfo;
import com.hxkj.domain.po.Article;
import com.hxkj.domain.po.Tags;
import com.platform.common.domain.result.ResultDataStruct;
import com.platform.common.domain.result.ResultMessageStruct;
import com.platform.common.domain.to.PageTo;

import java.util.List;

/**
 * 文章Service
 * <p>
 * created by zzx on 2018/6/5.
 */
public interface ArticleService {

    /**
     * 获取文章列表
     *
     * @param
     * @return
     * @throws Exception
     */
    PageInfo<Article> get(Article article, PageTo pageParam) throws Exception;

    /**
     * 获取文章列表
     *
     * @param
     * @return
     * @throws Exception
     */
    PageInfo<Article> getArticleList(Article article, PageTo pageParam) throws Exception;


    /**
     * 查询一条文章信息
     *
     * @param article
     * @return
     * @throws Exception
     */
    ResultDataStruct getArticle(Article article) throws Exception;

    /**
     * @Description getArticleListByTags 根据tags获取文章列表
     **/
    PageInfo<Article> getArticleListByTags(Article article, PageTo pageTo);


    /**
     * 修改一条文章信息
     *
     * @param article
     */
    ResultMessageStruct updateArticle(Article article) throws Exception;

    /**
     * 文章恢复
     *
     * @param article
     */
    ResultMessageStruct articleAudit(Article article) throws Exception;

    /**
     * 文章审核/设置文章推荐级别 批量
     *
     * @param article
     */
    ResultMessageStruct articleRecover(Article article) throws Exception;

    /**
     * 文章置顶
     *
     * @param article
     */
    ResultMessageStruct articleStick(Article article) throws Exception;

    /**
     * 批量软删除文章  至回收站
     *
     * @param article
     */
    ResultMessageStruct removerArticle(Article article) throws Exception;

    /**
     * 发布一条文章信息
     *
     * @param article
     */
    ResultDataStruct saveArticle(Article article) throws Exception;

    /**
     * 从回收站中彻底删除文章
     *
     * @param article
     */
    ResultMessageStruct deleteArticle(Article article) throws Exception;


    /**
     * 查询 新闻推荐  热门百科 一级  二级 推荐  3篇文章
     *
     * @param article
     * @return 符合条件的Article对象List
     */
    ResultDataStruct getArticle1(Article article) throws Exception;

    /**
     * 查询 新闻推荐  热门百科 三级 推荐      4篇文章
     *
     * @param article
     * @return 符合条件的Article对象List
     */
    ResultDataStruct getArticle3(Article article) throws Exception;

    /**
     * 新闻推荐 三级 推荐   按页数来获取文章
     *
     * @param article
     * @return 符合条件的Article对象List
     */
    ResultDataStruct<List<Article>> getArticle4(Article article) throws Exception;

    /**
     * 查询 期权行情   期权百科  首页模块  无分页
     *
     * @param article
     * @return 符合条件的Article对象List
     */
    ResultDataStruct getArticleMarket(Article article) throws Exception;

    /**
     * 查询 热门文章  取 10 条
     *
     * @param article
     * @return 符合条件的Article对象List
     */
    ResultDataStruct getHotArticle(Article article) throws Exception;


    /**
     * 获取咨询或曝光的总条数
     *
     * @param article
     * @return
     */
    ResultDataStruct<Integer> getRightsCount(Article article) throws Exception;

    ResultDataStruct<Article> getPreArticle(Article article);

    ResultDataStruct<Article> getNextArticle(Article article);


    /**
     * @return com.platform.common.domain.result.ResultDataStruct<com.hxkj.domain.po.Article>
     * @author Mr.zheng
     * @Description getArticleListByParam 根据参数获取文章列表
     * @Date 10:14 2018/7/20
     * @Param [article]
     **/
    List<Article> getArticleListByParam(Article article) throws Exception;

    /**
     * @return java.util.List<com.hxkj.domain.po.Tags>
     * @author Mr.zheng
     * @Description getHotTagsList 获取热门文章的标签列表
     * @Date 11:59 2018/7/20
     * @Param [tags]
     **/
    List<Tags> getTagsListByHotArticle(Article article) throws Exception;


    /**
    * @author Mr.zheng
    * @Description modifuArticleAsPath 修改静态资源路径
    * @Date 15:24 2018/7/24
    * @Param [article]
    * @return void
    **/
    void modifyArticleAsPath(Article article) throws Exception;

    //获取曝光和咨询文章列表
    List<Article> getrightsArticlesByParam(Article article) throws Exception;

    /**
    * @author Mr.zheng
    * @Description modifyHeat 根据文章的ID和站点ID修改文章热度值
    * @Date 9:33 2018/8/9
    * @Param [article]
    * @return com.platform.common.domain.result.ResultDataStruct<com.hxkj.domain.po.Article>
    **/
    ResultDataStruct<Article> modifyHeat(Article article) throws Exception;


    /**
     *
     * @Description 根据模板和站点获取绑定的文章
     * @Date 2018年8月13日11:03:49
     * @Param [article]
     **/
    ResultDataStruct<List<Article>> searchArticle(Article article) throws Exception;

    /**
     * @author Mr.zheng
     * @Description getArticleListByTime 根据文章id字符串获取30天以内的需要生成静态资源的文章列表
     * @Date 16:31 2018/8/14
     * @Param [article]
     * @return com.platform.common.domain.result.ResultPageStruct<com.hxkj.domain.po.Article>
     **/
    List<Article> getArticleListByTime(Article article) throws Exception;


    /**
     * @author Mr.zheng
     * @Description getArticleByTempletId 根据模板ID和站点ID去获取一条文章模拟数据
     * @Date 17:38 2018/8/16
     * @Param [article]
     * @return com.platform.common.domain.result.ResultDataStruct<com.hxkj.domain.po.Article>
     **/
    ResultDataStruct<Article> getArticleByTempletId(Article article);

    List<Article> getArticleInMonth(Article article) throws Exception;

    //自定义标签,获取相关推荐文章  chenfangzhou
    List<Article> getCorrelationArticle(Article article) throws Exception;

    List<Article> getDailyArticleList(Article article);

    List<Article> getWeeklyArticleList(Article article);


    /**
     * 根据用户中心的需求查询所有站点热度最高的十篇文章
     * @return
     */
    ResultDataStruct<List<Article>> selectArticleForUserCenter();

    //外汇网根据tags获取相关推荐文章 chenfangzhou
    List<Article> getRecommendationArticle(Article article) throws Exception;

    List<Article> getArticleByIds(Article article) throws Exception;

    /**
     * 根据文章编号查询文章
     * 用户中心收藏列表使用该接口
     * @author zhangheng
     * @param articleId
     * @return Article
     * @throws Exception
     */
    ResultDataStruct<Article> getArticleByArticleId(Long articleId) throws Exception;


}
